#include "SGraphics.h"
#include "SDisplayContext.h"
#include "SNativeImage.h"

#include <math.h>

using namespace WONAPI;
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
SGraphics::SGraphics()
{
}
	
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
SGraphics::~SGraphics()
{
	Detach();
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void SGraphics::Attach(DisplayContext *theContext)
{
	Graphics::Attach(theContext);
	mSurface = ((SDisplayContext*)theContext)->mSurface;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void SGraphics::Detach()
{
	Graphics::Detach();
	mSurface = NULL;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void SGraphics::SetColorHook()
{
	mSurface->SetColor(mColor);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
DWORD SGraphics::GetPixelHook(int x, int y)
{
	return mSurface->GetPixel(x,y);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void SGraphics::SetPixelHook(int x, int y, DWORD theColor)
{
	mSurface->SetPixel(x,y,theColor);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void SGraphics::DrawLineHook(int x1, int y1, int x2, int y2)
{
	mSurface->DrawLine(x1,y1,x2,y2);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void SGraphics::DrawRectHook(int x, int y, int width, int height)
{
	mSurface->DrawRect(x,y,width,height);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void SGraphics::DrawDottedRectHook(int x, int y, int width, int height)
{
	Graphics::DrawDottedRectHook(x,y,width,height);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void SGraphics::FillRectHook(int x, int y, int width, int height)
{
	mSurface->FillRect(x,y,width,height);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
bool SGraphics::BlendSupported()
{
	return false;
}
//////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void SGraphics::FillRectBlendHook(int tx, int ty, int width, int height, int theBlendAmount)
{
	if(!BlendSupported())
		return;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void SGraphics::DrawPolygonHook(POINT thePoints[], int nPoints)
{	
	Graphics::DrawPolygonHook(thePoints,nPoints);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void SGraphics::FillPolygonHook(POINT thePoints[], int nPoints)
{
	Graphics::FillPolygonHook(thePoints,nPoints);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void SGraphics::DrawEllipseHook(int x, int y, int width, int height)
{
	mSurface->DrawEllipse(x,y,width,height);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void SGraphics::FillEllipseHook(int x, int y, int width, int height)
{
	mSurface->FillEllipse(x,y,width,height);
}


///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void SGraphics::DrawArcHook(int x, int y, int width, int height, int startAngle, int arcAngle)
{
	mSurface->DrawArc(x,y,width,height,startAngle,arcAngle);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void SGraphics::ClearClipRectHook()
{
	mSurface->ClearClipRect();
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void SGraphics::SetClipRectHook(int x, int y, int width, int height)
{
	mSurface->SetClipRect(x,y,width,height);
}
